/**********************************************************************************************/
// 4Equal.cpp
// 
//
// Element 2And
// Copyright Diamant Group 2008
/**********************************************************************************************/
#include "4Equal.h"
#include "dgt_CircuitContact.h"
#include "dgt_CircuitLink.h"
#include "dgt_CircuitElement.h"

/**********************************************************************************************/
#ifdef _MANAGED
#pragma managed(push, off)
#endif


/**********************************************************************************************/
/**********************************************************************************************/
dgt_Equal_Four::dgt_Equal_Four()
{
	// Initalialize element

	// Name
	m_Name = _( "Element 2And" );

	m_ServiceInputs.Add( _("D1") );
	m_ServiceInputs.Add( _("D2") );
	m_ServiceInputs.Add( _("D3") );
	m_ServiceInputs.Add( _("D4") );

	m_Dependies.Add( _("log_and.dll") );
	m_Dependies.Add( _("log_xor.dll") );

	// initialize subcircuit

	// array of elements
	dgt_CrcElementArray tElements;
	dgt_CircuitElement_Ptr el1( new dgt_CircuitElement( _("log_xor.dll"), 0 ) );
	dgt_CircuitElement_Ptr el2( new dgt_CircuitElement( _("log_xor.dll"), 0 ) );
	dgt_CircuitElement_Ptr el3( new dgt_CircuitElement( _("log_xor.dll"), 0 ) );
	dgt_CircuitElement_Ptr el4( new dgt_CircuitElement( _("log_xor.dll"), 0 ) );
	dgt_CircuitElement_Ptr el5( new dgt_CircuitElement( _("log_and.dll"), 1 ) );
	tElements.Add( el1 );
	tElements.Add( el2 );
	tElements.Add( el3 );
	tElements.Add( el4 );
	tElements.Add( el5 );

	// array of links
	dgt_CrcLinkArray tLinks;
	dgt_CircuitLink_Ptr link1( new dgt_CircuitLink( 0, 0, 4, 0 ) );
	dgt_CircuitLink_Ptr link2( new dgt_CircuitLink( 1, 0, 4, 1 ) );
	dgt_CircuitLink_Ptr link3( new dgt_CircuitLink( 2, 0, 4, 2 ) );
	dgt_CircuitLink_Ptr link4( new dgt_CircuitLink( 3, 0, 4, 3 ) );
	tLinks.Add( link1 );
	tLinks.Add( link2 );
	tLinks.Add( link3 );
	tLinks.Add( link4 );

	// array of inputs
	dgt_CrcContactArray tInputs;
	dgt_CircuitContact_Ptr cnt1( new dgt_CircuitContact( wxEmptyString, 0, 0, 0 ) );
	dgt_CircuitContact_Ptr cnt2( new dgt_CircuitContact(wxEmptyString,0, 1, 1 ) );
	dgt_CircuitContact_Ptr cnt3( new dgt_CircuitContact(wxEmptyString,1, 0, 0 ) );
	dgt_CircuitContact_Ptr cnt4( new dgt_CircuitContact(wxEmptyString,1, 1, 1 ) );
	dgt_CircuitContact_Ptr cnt5( new dgt_CircuitContact(wxEmptyString,2, 0, 0 ) );
	dgt_CircuitContact_Ptr cnt6( new dgt_CircuitContact(wxEmptyString,2, 1, 1 ) );
	dgt_CircuitContact_Ptr cnt7( new dgt_CircuitContact(wxEmptyString,3, 0, 0 ) );
	dgt_CircuitContact_Ptr cnt8( new dgt_CircuitContact(wxEmptyString,3, 1, 1 ) );
	tInputs.Add( cnt1 );
	tInputs.Add( cnt2 );
	tInputs.Add( cnt3 );
	tInputs.Add( cnt4 );
	tInputs.Add( cnt5 );
	tInputs.Add( cnt6 );
	tInputs.Add( cnt7 );
	tInputs.Add( cnt8 );

	// array of outputs
	dgt_CrcContactArray tOutputs;
	dgt_CircuitContact_Ptr out1( new dgt_CircuitContact(wxEmptyString,4, 0, 0 ) );

	m_Circuit->set_Elements( tElements );
	m_Circuit->set_Links( tLinks );
	m_Circuit->set_Inputs( tInputs );
	m_Circuit->set_Outputs( tOutputs );

}

/**********************************************************************************************/
dgt_Equal_Four::~dgt_Equal_Four()
{

}